package com

import kotlinx.serialization.Serializable

/**
 * 推送方式枚举
 */
@Serializable
enum class PushType {
    SFTP,  // SFTP推送方式
    AWS,   // AWS推送方式
    OSS,   // 阿里云OSS推送方式
    GIT    // Git推送方式
}

/**
 * 文件重命名模式枚举
 *
 * 该枚举定义了文件在输出时的重命名策略，主要用于将文件名与CRC32校验值结合，
 * 以便在文件内容变化时生成不同的文件名，常用于缓存控制和版本管理。
 */
@Serializable
enum class FileCrcMode {
    /**
     * 无重命名模式
     *
     * 保持原始文件名不变，不进行任何重命名操作。
     * 这是默认模式，适用于不需要文件名版本控制的场景。
     */
    NONE,

    /**
     * 追加模式
     *
     * 在原始文件名后追加CRC32值，格式为：`filename-CRC32.extension`。
     * 例如：`style.css` 可能变成 `style-a1b2c3d4.css`。
     * 适用于希望保留原始文件名信息同时添加内容标识的场景。
     */
    APPEND,

    /**
     * 前缀模式
     *
     * 在原始文件名前添加CRC32值，格式为：`CRC32-filename.extension`。
     * 例如：`script.js` 可能变成 `a1b2c3d4-script.js`。
     * 适用于希望以内容标识为主要文件名的场景。
     */
    PREFIX,

    /**
     * 完整替换模式
     *
     * 将整个文件名（包括扩展名前的部分）替换为CRC32值，格式为：`CRC32.extension`。
     * 例如：`index.html` 可能变成 `a1b2c3d4.html`。
     * 适用于需要完全基于内容生成文件名的场景，如静态资源缓存优化。
     */
    FULL
}
